<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="B3L5C" id="B3L5C"><span data-lake-id="u53f7ae46" id="u53f7ae46">典型回答</span></h1>
  <p data-lake-id="ua33b61db" id="ua33b61db"><br></p>
  <p data-lake-id="uf8fedbe2" id="uf8fedbe2"><span data-lake-id="u5cc375bf" id="u5cc375bf">在 ElasticSearch 中，倒排索引是一种常用的索引结构，用于快速搜索文档中的某个词汇。</span></p>
  <p data-lake-id="uc7f28741" id="uc7f28741"><br></p>
  <p data-lake-id="u09f0253c" id="u09f0253c"><strong><span data-lake-id="uf1d0c5ea" id="uf1d0c5ea">倒排索引的结构与传统的索引结构相反</span></strong><span data-lake-id="u23a20702" id="u23a20702">，传统的索引结构是由文档构成的，每个文档包含了若干个词汇，然后根据这些词汇建立索引。而倒排索引是由词汇构成的，每个词汇对应了若干个文档，然后根据这些文档建立索引。</span></p>
  <p data-lake-id="u83268e30" id="u83268e30"><span data-lake-id="u32b84d5c" id="u32b84d5c">​</span><br></p>
  <p data-lake-id="u36a75136" id="u36a75136"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1678518023898-abe1a2e3-cb60-452c-9abe-920ec9448567.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_48%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ue9b85e6c" id="ue9b85e6c"><span data-lake-id="uafddfc49" id="uafddfc49">​</span><br></p>
  <p data-lake-id="u976d00bb" id="u976d00bb"><span data-lake-id="ub63285ee" id="ub63285ee">对于一个包含多个词汇的文档，倒排索引会将每个词汇作为一个关键字（Term），然后记录下该词汇所在的文档编号（Document ID）及该词汇在文档中的位置（Term Position）。这样，当用户输入一个关键字时，就可以快速地查找到包含该关键字的文档编号，然后通过文档编号再查找到对应的文档内容。</span></p>
  <p data-lake-id="uc0e8d276" id="uc0e8d276"><span data-lake-id="ud1006310" id="ud1006310">​</span><br></p>
  <p data-lake-id="ue42cdc01" id="ue42cdc01"><strong><span data-lake-id="u7feec91e" id="u7feec91e">倒排索引的优点在于它可以快速定位包含关键字的文档，而且可以支持复杂的搜索操作，如词组搜索、通配符搜索等。</span></strong><span data-lake-id="ua7d5f1c4" id="ua7d5f1c4">同时，由于倒排索引是由词汇构成的，因此在进行数据分析和统计时也非常有用。在 ElasticSearch 中，倒排索引是一种非常重要的索引结构，它被广泛应用于搜索引擎、日志分析、推荐系统等领域。</span></p>
  <p data-lake-id="uf215397d" id="uf215397d"><span data-lake-id="ub885dfe7" id="ub885dfe7">​</span><br></p>
  <h1 data-lake-id="jOxAv" id="jOxAv"><span data-lake-id="ua02cc8b0" id="ua02cc8b0">扩展知识</span></h1>
  <p data-lake-id="u09f769a4" id="u09f769a4"><br></p>
  <h2 data-lake-id="m7ka2" id="m7ka2"><span data-lake-id="ufb3d35cf" id="ufb3d35cf">倒排索引建立过程</span></h2>
  <p data-lake-id="u2f005f25" id="u2f005f25"><br></p>
  <p data-lake-id="u2178e39a" id="u2178e39a"><span data-lake-id="ub60a4c3f" id="ub60a4c3f">ES中的倒排索引建立过程主要有2个步骤，分别是分词、建立倒排索引</span></p>
  <p data-lake-id="u5d007b63" id="u5d007b63"><span data-lake-id="u0d0921e1" id="u0d0921e1">​</span><br></p>
  <p data-lake-id="ua1ae7c72" id="ua1ae7c72"><span data-lake-id="uc3cdb0f4" id="uc3cdb0f4">比如我们现在有三份文档内容，分别是</span></p>
  <p data-lake-id="ue7ab123f" id="ue7ab123f"><span data-lake-id="u59467fdd" id="u59467fdd">​</span><br></p>
  <table data-lake-id="Zq3pd" id="Zq3pd" width-mode="contain" class="lake-table" style="width: 752px">
   <colgroup>
    <col width="250">
    <col width="502">
   </colgroup>
   <tbody>
    <tr data-lake-id="u04e26e2d" id="u04e26e2d">
     <td data-lake-id="u02bc6dfd" id="u02bc6dfd">
      <p data-lake-id="ue21a3d30" id="ue21a3d30"><span data-lake-id="u549258be" id="u549258be">id</span></p></td>
     <td data-lake-id="uc3633a32" id="uc3633a32">
      <p data-lake-id="uf06952a3" id="uf06952a3"><span data-lake-id="ua634269d" id="ua634269d">content</span></p></td>
    </tr>
    <tr data-lake-id="u918a7663" id="u918a7663">
     <td data-lake-id="u42a3cb30" id="u42a3cb30">
      <p data-lake-id="ue4208d0e" id="ue4208d0e"><span data-lake-id="u2bb1c491" id="u2bb1c491">1</span></p></td>
     <td data-lake-id="u13074d0f" id="u13074d0f">
      <p data-lake-id="u0dd988e9" id="u0dd988e9"><span data-lake-id="u8cf572f1" id="u8cf572f1">深入理解Java核心技术—Hollis</span></p></td>
    </tr>
    <tr data-lake-id="u2cc7a849" id="u2cc7a849">
     <td data-lake-id="uc8d5b1a5" id="uc8d5b1a5">
      <p data-lake-id="u14533950" id="u14533950"><span data-lake-id="ue6ee3045" id="ue6ee3045">2</span></p></td>
     <td data-lake-id="uf1281a05" id="uf1281a05">
      <p data-lake-id="ub92fc0db" id="ub92fc0db"><span data-lake-id="ucef63bce" id="ucef63bce">深入理解Java虚拟机—周志明</span></p></td>
    </tr>
    <tr data-lake-id="udb11643f" id="udb11643f">
     <td data-lake-id="u361c2431" id="u361c2431">
      <p data-lake-id="u08ed7b6b" id="u08ed7b6b"><span data-lake-id="u501d197c" id="u501d197c">3</span></p></td>
     <td data-lake-id="u3df797a1" id="u3df797a1">
      <p data-lake-id="u11c2f48b" id="u11c2f48b"><span data-lake-id="u386aceb1" id="u386aceb1">Java编程思想—布鲁斯·埃克尔</span></p></td>
    </tr>
   </tbody>
  </table>
  <h3 data-lake-id="rGuij" id="rGuij"><span data-lake-id="u2940d342" id="u2940d342">分词</span></h3>
  <p data-lake-id="ue523800d" id="ue523800d"><span data-lake-id="uac01df29" id="uac01df29">在倒排索引建立过程中，首先需要将文档中的原始文本分解成一个个词项（Term）。Elasticsearch 中默认使用标准分词器（Standard Analyzer）进行分词。</span></p>
  <p data-lake-id="u37a6e8e7" id="u37a6e8e7"><span data-lake-id="u26c7fe31" id="u26c7fe31">​</span><br></p>
  <p data-lake-id="u54228cde" id="u54228cde"><span data-lake-id="u2fdd424e" id="u2fdd424e">以上三个文本内容，我们经过分词之后，就会包含了"深入"、"理解"、"Java"、"核心"、"技术"、"编程"、"思想"、"Hollis"、"周志明"、"布鲁斯·埃克尔"等词</span></p>
  <p data-lake-id="ufb50684a" id="ufb50684a"><span data-lake-id="u81bc13ea" id="u81bc13ea">​</span><br></p>
  <h3 data-lake-id="FaSK1" id="FaSK1"><span data-lake-id="uc516d5c6" id="uc516d5c6">生成倒排索引</span></h3>
  <p data-lake-id="u6c35e1c2" id="u6c35e1c2"><br></p>
  <p data-lake-id="u6eb3fb17" id="u6eb3fb17"><span data-lake-id="uafc6811f" id="uafc6811f">将分开的词，当做索引，与对应的文档ID进行关联，形成倒排表。</span></p>
  <p data-lake-id="u778db2c9" id="u778db2c9"><span data-lake-id="udfb11061" id="udfb11061">​</span><br></p>
  <table data-lake-id="otD8z" id="otD8z" width-mode="contain" class="lake-table" style="width: 500px">
   <colgroup>
    <col width="250">
    <col width="250">
   </colgroup>
   <tbody>
    <tr data-lake-id="u76e9c2d6" id="u76e9c2d6">
     <td data-lake-id="ub4686d1f" id="ub4686d1f">
      <p data-lake-id="u7bcca3bd" id="u7bcca3bd"><span data-lake-id="uc02daaea" id="uc02daaea">词条</span></p></td>
     <td data-lake-id="u94273ebb" id="u94273ebb">
      <p data-lake-id="ubc70b285" id="ubc70b285"><span data-lake-id="u4bbbcde3" id="u4bbbcde3">文档ID</span></p></td>
    </tr>
    <tr data-lake-id="ucb708b14" id="ucb708b14">
     <td data-lake-id="ubceae13c" id="ubceae13c">
      <p data-lake-id="ud7f8c998" id="ud7f8c998"><span data-lake-id="u673b87d6" id="u673b87d6">深入</span></p></td>
     <td data-lake-id="u5751ab53" id="u5751ab53">
      <p data-lake-id="ub8cb71e8" id="ub8cb71e8"><span data-lake-id="u16445ddb" id="u16445ddb">1,2</span></p></td>
    </tr>
    <tr data-lake-id="u50acfdfd" id="u50acfdfd">
     <td data-lake-id="u2a90dfc7" id="u2a90dfc7">
      <p data-lake-id="ucb51bc77" id="ucb51bc77"><span data-lake-id="udbc1f864" id="udbc1f864">理解</span></p></td>
     <td data-lake-id="ua625add9" id="ua625add9">
      <p data-lake-id="uec9ae1ed" id="uec9ae1ed"><span data-lake-id="uc8bdf986" id="uc8bdf986">1,2</span></p></td>
    </tr>
    <tr data-lake-id="u0b54f392" id="u0b54f392">
     <td data-lake-id="u44f02088" id="u44f02088">
      <p data-lake-id="u61aab725" id="u61aab725"><span data-lake-id="ucccaba71" id="ucccaba71">Java</span></p></td>
     <td data-lake-id="u21441779" id="u21441779">
      <p data-lake-id="udedad09e" id="udedad09e"><span data-lake-id="ua3e8a506" id="ua3e8a506">1,2,3</span></p></td>
    </tr>
    <tr data-lake-id="udf0c9b9f" id="udf0c9b9f">
     <td data-lake-id="u3fc459f1" id="u3fc459f1">
      <p data-lake-id="u0e33bd5c" id="u0e33bd5c"><span data-lake-id="u5b143bf1" id="u5b143bf1">虚拟机</span></p></td>
     <td data-lake-id="u9633fc2a" id="u9633fc2a">
      <p data-lake-id="u01d3107f" id="u01d3107f"><span data-lake-id="u692ee142" id="u692ee142">2</span></p></td>
    </tr>
    <tr data-lake-id="u3a6a5b32" id="u3a6a5b32">
     <td data-lake-id="ua8e41faa" id="ua8e41faa">
      <p data-lake-id="u27078e1c" id="u27078e1c"><span data-lake-id="uc2457bc5" id="uc2457bc5">核心</span></p></td>
     <td data-lake-id="u375a06e8" id="u375a06e8">
      <p data-lake-id="u38be53d5" id="u38be53d5"><span data-lake-id="uda58bfb6" id="uda58bfb6">1</span></p></td>
    </tr>
    <tr data-lake-id="u1d0aba14" id="u1d0aba14">
     <td data-lake-id="u48d05f5c" id="u48d05f5c">
      <p data-lake-id="ud0479e2b" id="ud0479e2b"><span data-lake-id="u59af8598" id="u59af8598">技术</span></p></td>
     <td data-lake-id="u372711eb" id="u372711eb">
      <p data-lake-id="u93fa378e" id="u93fa378e"><span data-lake-id="u614e0f8c" id="u614e0f8c">1</span></p></td>
    </tr>
    <tr data-lake-id="u4f721cc1" id="u4f721cc1">
     <td data-lake-id="u26b1cc32" id="u26b1cc32">
      <p data-lake-id="u972d782f" id="u972d782f"><span data-lake-id="u3d74f723" id="u3d74f723">编程</span></p></td>
     <td data-lake-id="ud9f7b3c3" id="ud9f7b3c3">
      <p data-lake-id="ue324d1c8" id="ue324d1c8"><span data-lake-id="u2e4fc6fd" id="u2e4fc6fd">3</span></p></td>
    </tr>
    <tr data-lake-id="u94660c8f" id="u94660c8f">
     <td data-lake-id="ub6247174" id="ub6247174">
      <p data-lake-id="u3b1926d0" id="u3b1926d0"><span data-lake-id="u84456f02" id="u84456f02">思想</span></p></td>
     <td data-lake-id="u03063a5c" id="u03063a5c">
      <p data-lake-id="u86608254" id="u86608254"><span data-lake-id="ua7ef4c74" id="ua7ef4c74">3</span></p></td>
    </tr>
   </tbody>
  </table>
  <p data-lake-id="u5579b7e3" id="u5579b7e3"><span data-lake-id="u38de310b" id="u38de310b">​</span><br></p>
  <p data-lake-id="u13a6acfe" id="u13a6acfe"><span data-lake-id="uef748f80" id="uef748f80">在生成了倒排表后，还会对倒排表进行压缩，减少空间占用。常用的压缩算法包括Variable Byte Encoding和Simple9等。最后再将压缩后的倒排表存储在磁盘中，以便后续的搜索操作能够快速地访问倒排表。</span></p>
 </body>
</html>